package com.yingyi.system.service.impl;

import com.yingyi.basic.service.impl.BaseServiceImpl;
import com.yingyi.system.domain.Menu;
import com.yingyi.system.mapper.MenuMapper;
import com.yingyi.system.service.IMenuService;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * (t_menu)表服务层实现类
 *
 * @author Yingyi
 * @since 2022-08-02 10:57:48
 */
@Service
public class MenuServiceImpl extends BaseServiceImpl<Menu> implements IMenuService {

    @Autowired
    private MenuMapper mapper;

    /**
     * 查询菜单树信息
     *  前端需要一个数组，包含了菜单的层次结构
     *  在Menu对象的定义中包含的子菜单children字段（同前端的回显属性名），一对多关系，
     *  使用迭代处理
     *  1 顶层菜单
     *  2 子菜单
     *
     * @return
     */
    @Override
    public List<Menu> getMenuTree() {
        List<Menu> menus = mapper.queryAll();

        //查询出所有菜单，使用map存储
        HashMap<Long, Menu> map = new HashMap<>();

        for (Menu menu : menus) {
            //存储的形式 id - menu对象
            map.put(menu.getId(), menu);
        }

        ArrayList<Menu> menuTree = new ArrayList<>();

        for (Menu menu : menus) {
            if(menu.getParentId() == null) {
                //顶层菜单
                menuTree.add(menu);
            } else {
                //子菜单, 将本身对象放入其父菜单的children集合中
                map.get(menu.getParentId()).getChildren().add(menu);
            }
        }

        return menuTree;
    }
}
